var mongoose=require('mongoose');
var ObjectID=require('mongodb').ObjectID;
var crypto=require('crypto');
var UserSchema = new mongoose.Schema({
    name:{
        type:String,
        required:true
    },
    password:{
        type:String,
        required:true,
        set:function(pass){
            if(!pass || 'string'!==typeof pass)return pass;
            return crypto.createHash('md5').update(pass).digest('hex');
        }
    },
    email:{
        type:String,
        required:true
    },
    face:{
        type:String,
        default:'/images/faces/'+Math.ceil(Math.random()*10)+'.jpg'
    },
    regDate:{
        type:Date
    },
    postCnt:{
        type:Number,
        default:0
    }
});

UserSchema.virtual('regTime').get(function (){
    var d=this.regDate;
    return [d.getFullYear(), d.getMonth()+1, d.getDate()].join('-')+' '+[d.getHours(), d.getMinutes(), d.getSeconds()].join(':');
});

UserSchema.statics.getById= function (id,cb) {
    this.findOne({_id:new ObjectID(id)}, function (err, user) {
        if(err)cb(err);
        else cb(null,user);
    });
};
UserSchema.statics.getByName= function (name,cb,isAPI) {
    var limit;
    if(isAPI){
        limit={
            _id:false,
            name:true,
            regDate:true,
            email:true
        }
    }
    this.findOne({name:name},limit,function (err, user) {
        if(err)cb(err);
        else cb(null,user);
        //console.log('User.getByName:',err,user);
    });
};

//API
UserSchema.statics.getAll= function (cb,isAPI) {
    var limit;
    if(isAPI){
        limit={
            _id:0,
            name:1,
            email:1,
            regDate:1
        }
    }
    this.find(null,limit,function (err, users) {
        if(err)cb(err);
        else cb(null,users);
    });
};

module.exports=mongoose.model('User',UserSchema);